// var i;
// var $eventManager = require("./EventManager");
// var $resKeeper = require("./ResKeeper");
// var $evenType = require("./EvenType");
// var u = cc._decorator;
// var d = u.ccclass;
// var p = (u.property, u.inspector);
// var h = (function (e) {
//     function t() {
//         return (null !== e && e.apply(this, arguments)) || this;
//     }
//     __extends(t, e);
//     t.prototype.onEnable = function () {
//         $eventManager.EventMgr.addEventListener($evenType.EVENT_TYPE.Game_CameraControl, this.setCamera, this);
//         $eventManager.EventMgr.addEventListener("zuobiaozhuanhuan", this.zhuanHuanPost, this);
//     };
//     t.prototype.setCamera = function (e) {
//         if (cc.winSize.height / cc.winSize.width <= 2) {
//             e -= 0.1;
//         }
//         var t = 0;
//         if (1 != e) {
//             t = -50;
//         }
//         var o = "cubicActionIn";
//         if (1 != e) {
//             o = "cubicActionOut";
//         }
//         var n = this.node.getComponent(cc.Camera);
//         cc.tween(this.node)
//             .to(
//                 0.7,
//                 {
//                     y: t
//                 },
//                 {
//                     easing: o
//                 }
//             )
//             .start();
//         cc.tween(n)
//             .to(
//                 0.7,
//                 {
//                     zoomRatio: e
//                 },
//                 {
//                     easing: o
//                 }
//             )
//             .call(function () {
//                 $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Game_Hide);
//                 $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.GAME_LOCK_SCREE, !1);
//             })
//             .start();
//     };
//     t.prototype.zhuanHuanPost = function (e, t) {
//         var o = this.node.getComponent(cc.Camera);
//         var n = cc.v2();
//         o.getScreenToWorldPoint(e, n);
//         t(n);
//     };
//     t.prototype.onDisable = function () {
//         $eventManager.EventMgr.rmEventListener($evenType.EVENT_TYPE.Game_CameraControl, this.setCamera, this);
//     };
//     return __decorate([d], t);
// })($resKeeper.default);
// exports.default = h;

// import { EventMgrInstance } from './EventManager';
// import ResKeeper from './ResKeeper';
// import { EVENT_TYPE } from './EvenType';

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * 建议类名：CameraController
//  */
// @ccclass
// class UI_CameraControl extends ResKeeper {
//     /**
//      * 当组件启用时调用
//      * 建议方法名：handleEnable
//      */
//     onEnable() {
//         EventMgrInstance.addEventListener(EVENT_TYPE.Game_CameraControl, this.setCamera, this);
//         EventMgrInstance.addEventListener("zuobiaozhuanhuan", this.zhuanHuanPost, this);
//     }

//     /**
//      * 设置相机
//      * @param e 缩放比例
//      * 建议方法名：configureCamera
//      */
//     setCamera(e: number) {
//         if (cc.winSize.height / cc.winSize.width <= 2) {
//             e -= 0.1;
//         }
//         let t = 0;
//         if (1 != e) {
//             t = -50;
//         }
//         let o = "cubicActionIn";
//         if (1 != e) {
//             o = "cubicActionOut";
//         }
//         const n = this.node.getComponent(cc.Camera);
//         cc.tween(this.node)
//             .to(
//                 0.7,
//                 { y: t },
//                 { easing: o }
//             )
//             .start();
//         cc.tween(n)
//             .to(
//                 0.7,
//                 { zoomRatio: e },
//                 { easing: o }
//             )
//             .call(() => {
//                 EventMgrInstance.dispatchEvent(EVENT_TYPE.Game_Hide);
//                 EventMgrInstance.dispatchEvent(EVENT_TYPE.GAME_LOCK_SCREE, false);
//             })
//             .start();
//     }

//     /**
//      * 转换坐标
//      * @param e 屏幕坐标
//      * @param t 回调函数，接收世界坐标
//      * 建议方法名：convertPosition
//      */
//     zhuanHuanPost(e: cc.Vec2, t: (worldPos: cc.Vec2) => void) {
//         const o = this.node.getComponent(cc.Camera);
//         const n = cc.v2();
//         o.getScreenToWorldPoint(e, n);
//         t(n);
//     }

//     /**
//      * 当组件禁用时调用
//      * 建议方法名：handleDisable
//      */
//     onDisable() {
//         EventMgrInstance.rmEventListener(EVENT_TYPE.Game_CameraControl, this.setCamera, this);
//     }
// }

// export default UI_CameraControl;

import { EventMgrInstance } from './EventManager';
import ResKeeper from './ResKeeper';
import { EVENT_TYPE } from './EvenType';

const { ccclass } = cc._decorator;

/**
 * 建议类名：CameraController
 * 相机控制类
 */
@ccclass
class ViewCameraControl extends ResKeeper {

    /**
     * 当组件启用时调用
     * 建议方法名：handleEnable
     */
    onEnable() {
        EventMgrInstance.addListener(EVENT_TYPE.Game_CameraControl, this.setCamera, this);
        EventMgrInstance.addListener("zuobiaozhuanhuan", this.convertPosition, this);
    }

    /**
     * 设置相机
     * @param scale 缩放比例
     * 建议方法名：configureCamera
     */
    setCamera(scale: number) {
        const isTallerScreen = cc.winSize.height / cc.winSize.width <= 2;
        if (isTallerScreen) {
            scale -= 0.1;
        }
        let cameraPosY = 0;
        if (scale !== 1) {
            cameraPosY = -50;
        }
        let easingType = "cubicActionIn";
        if (scale !== 1) {
            easingType = "cubicActionOut";
        }
        // this.node is a cc.Node instance representing the component's node
        const cameraComponent = this.node.getComponent(cc.Camera);
        cc.tween(this.node)
            .to(
                0.7,
                { y: cameraPosY },
                { easing: easingType }
            )
            .start();
        cc.tween(cameraComponent)
            .to(
                0.7,
                { zoomRatio: scale },
                { easing: easingType }
            )
            .call(() => {
                EventMgrInstance.emitEvent(EVENT_TYPE.Game_Hide);
                EventMgrInstance.emitEvent(EVENT_TYPE.GAME_LOCK_SCREE, false);
            })
            .start();
    }

    /**
     * 转换坐标
     * @param screenPos 屏幕坐标
     * @param callback 回调函数，接收世界坐标
     * 建议方法名：convertPosition
     */
    convertPosition(screenPos: cc.Vec2, callback: (worldPos: cc.Vec2) => void) {
        const cameraComponent = this.node.getComponent(cc.Camera);
        const worldPos = cc.v2();
        cameraComponent.getScreenToWorldPoint(screenPos, worldPos);
        callback(worldPos);
    }

    /**
     * 当组件禁用时调用
     * 建议方法名：handleDisable
     */
    onDisable() {
        EventMgrInstance.removeListener(EVENT_TYPE.Game_CameraControl, this.setCamera, this);
    }
}

export default ViewCameraControl;